命令注入攻擊 ( Command Injection ) 也是一種 Injection Attack 不過它注入的通常是惡意的系統命令,命令注入攻擊通常發生在接受使用者輸入並將其視為系統命令的應用程式中,例如Shell命令、作業系統命令或其他可執行的命令
命令注入攻擊的基本原理是攻擊者透過惡意構建的輸入,將惡意命令插入應用程式的執行中,應用程式通常會誤認為這些輸入是可信的,然後將它們傳遞給底層作業系統執行,如果應用程式未充分驗證和過濾這些輸入,攻擊者就能夠成功執行任意系統命令,這可能導致這幾種危險:
遠端命令執行 ( RCE ):攻擊者可以在目標系統上執行系統命令,從而獲得對系統的控制權
敏感資料洩漏:攻擊者可以訪問、修改或刪除敏感資料
拒絕服務(DoS)攻擊:攻擊者可以執行危險命令,使系統變得不可用,造成拒絕服務
假設有一個輸入框可以給使用者輸入關鍵字,而後端會根據關鍵字搜索系統,那以下是一個發生 Command Injection 的示例
正常的搜索請求:
使用者輸入:apple
後端處理:執行搜索命令,例如:`grep apple data.txt`
如果未適當驗證和過濾使用者輸入,攻擊者可以輸入惡意命令
惡意搜索請求:
使用者輸入:apple; ls
後端處理:執行搜索命令,但同時也執行了列出檔案的命令:`grep apple; ls data.txt`
在這種情況下,攻擊者成功執行了 ls 命令,列出目錄中的檔案
Linux/Unix 系統命令:
whoami
: 使用者帳號ls
:列出目錄中的檔案和子目錄cat
:查看檔案內容rm
:刪除檔案或目錄chmod
:修改檔案或目錄的權限uname -a
: 目前是什麼作業系統ifconfig
: 網路設定ps -ef
: 目前執行的程序grep
:在檔案中搜尋文字passwd
:更改使用者密碼ssh
:遠端登入到另一台電腦Windows 系統命令:
whoami
: 使用者帳號dir
:列出目錄中的檔案和子目錄type
:查看檔案內容del
或 rmdir
:刪除檔案或目錄icacls
:修改檔案或目錄的權限uname -a
: 目前是什麼作業系統ipconfig
: 網路設定tasklist
: 目前執行的程序net user
:管理使用者帳戶powershell
:執行PowerShell指令資料庫命令:
其它:
ping
:確定網路連線是否正常 (ICMP)curl
或 wget
:下載遠端檔案nslookup
或 dig
:查詢DNS記錄netstat -an
: 網路連結的狀況連接符號 :
;
: 結束第一個命令,直接執行第二個&&
: 第一個指令成功後執行第二個||
: 第一個指令失敗後執行第二個可用正規表達式跟白名單過濾
例如 PHP 的 Exec、Passthru、System、Shell_exec
Python的 subprocess.call
https://feifei.tw/command-injection/
https://tech-blog.cymetrics.io/posts/jo/zerobased-injectionattack/